/**
 * 带头节点两个链表，保存单词，他们有相同的后缀
 * 例如
 * abcdef   qwer
 *  hello   qwer 
 * 此时abcdef保存一个链表l1
 * hello保存一个链表l2
 * l1 和 l2的尾节点的next同时指向l3
 * l3为qwer
 * 找两个链表的相同后缀
 * 
 * 思路：想办法让右端对齐
 * 然后比较每一位
 * 1. 找计算长度O(n)+O(m)
 * 2. 比较O(n+m)
 * 总共O(m+n)两个链表长度之和
 */
class ListNode{
public:
    int data;
    ListNode* next;
};

auto count(ListNode* head){
    int count=0;
    auto temp = head->next;
    while (temp!=nullptr)
    {
        count++;
        temp=temp->next;
    }
    return count;
    
}

auto getHead(ListNode* head,int diff){
    auto temp=head->next;
    while (diff>0)
    {
        temp=temp->next;
        diff--;
    }
    return temp;
}
//从两个头，且长度相同的数组找起点
//不用那么麻烦了，这里是指针相同的，直接判断指针就好了
auto func(ListNode* head1,ListNode* head2){
    auto t1=head1;
    auto t2=head2;
    while (t1!=nullptr)//两个指针同时移动，判断一个即可
    {   
        if(t1->next==t2->next){
            return t1->next;
        }
        t1=t1->next;
        t2=t2->next;
    }
}
/// @brief 
/// @param head1 都是有头节点的
/// @param head2 
/// @return 
auto getSame(ListNode* hair1,ListNode* hair2){
    //获取长度
    int size1=count(hair1);
    int size2=count(hair2);
    //对齐长度，找到节点
    if(size1>size2){    
        int diff=size1-size2;
        auto head=getHead(hair1,diff);

    }else{
        int diff=size2-size1;
        auto head=getHead(hair2,diff);

    }
    
}

int main(int argc,char* argv[]){
    
    ListNode* head1;

    return 0;
}